package util

import (
. "fmt") 

var prompt string = ">>> "
var opcoes_comida string = "Você tem as seguintes opções (sequência de peças que serão comidas):"

type Tupla struct {
		X, Y, FicarX, FicarY int
		Comer bool
	
}

type Node struct {
	valor Tupla
	next *Node
}

func GetNumeroTomadas (tomadas [50] *Node) int{
	contador:=0
	for i:=0;i<50;i++{
		if (tomadas[i] == nil){
			break
		}
		contador++	
	}
	return contador

}

func ImprimeOpcoes (tuplas [50] *Node){
	for i:=0; i<50 ;i++{
		if (tuplas[i] == nil){
			break
		}
		ImprimeCaminhoNode(tuplas[i], i)
	}
}

func ImprimeCaminhoNode (node *Node, index int){
	var nodeAux *Node = node
	Print(prompt, index,":")	
	for nodeAux!= nil{
		Print("-> ( ",nodeAux.GetValor().X, nodeAux.GetValor().Y, ")")
		nodeAux = nodeAux.GetNext()
	}
	Println("")
}


func (node *Node) SetValor(valor *Tupla){ node.valor = *valor}
func (node *Node) GetValor() *Tupla { return &node.valor}
func (node *Node) SetNext(next *Node){ node.next = next}
func (node *Node) GetNext() *Node { return node.next}

func (pilha *Node) Push(novo *Node) *Node {

	topo := novo
	next := novo.GetNext()
	if(next != nil){
		topoNovaPilha := new(Node)
		topoNovaPilha.SetValor(novo.GetValor())
		
		var atual *Node
		for next != nil {
			atual = next
			next = atual.GetNext()
			topoNovaPilha = topoNovaPilha.Push(atual)
		}
		 
		topo = pilha
		
		next = topoNovaPilha
		for next != nil {
			atual = next
			next = atual.GetNext()
			atual.SetNext(topo)
			topo = atual
			topoNovaPilha = next
		}
				
	}else{
		topo.SetNext(pilha)
	}
	return topo
}

func (pilha *Node) Pull() (*Node, *Tupla) {
	return pilha.GetNext(), pilha.GetValor()
}

func (pilha *Node) PrintPilha() {
	
	Println("|", pilha.GetValor(), "|")
	next := pilha.GetNext() 
	for ;next != nil; {
		Println("|", next.GetValor(), "|")
		next = next.GetNext()
	}
	Println("-----")
}

func Inverter (i int) int {
	if(i != 0) {
		return 0
	}
	return 1
}	
	